#include <iostream>
#include <log4cpp/OstreamAppender.hh>
#include <log4cpp/PatternLayout.hh>
#include <log4cpp/Category.hh>
using std::cout;
using std::endl;
using namespace log4cpp;

void test(){
    OstreamAppender * ap1 = new OstreamAppender("console", &cout);
    PatternLayout * pl = new PatternLayout();
    pl->setConversionPattern("%d %c [%p] %m%n");
    ap1->setLayout(pl);

    //此时获取的是根记录器
    //此时直接使用root根记录器也可以，但是也可以使用叶子记录器
    //为什么呢？因为希望不同的业务功能模块使用不同的叶子记录器
    //这样就可以在日志中直接体现当前的日志属于哪个功能模块
    //比如电商项目：商品模块、订单模块、购物车、支付模块
    //分别使用不同的叶子记录器对应上述的功能模块
    //上述的日志布局中%c其实就是显示的是category的名称
    Category & root = Category::getRoot();
    //root仅仅做配置 设置一个基准的日志级别
    root.setPriority(Priority::DEBUG);
    root.setAppender(ap1);
    Category & product = root.getInstance("product");
    product.setPriority(Priority::INFO);
    Category & order = root.getInstance("order");
    Category & cart = root.getInstance("cart");
    Category & pay = root.getInstance("pay");
    
    product.debug("debug");
    product.info("info");
    product.alert("alert");
    order.debug("debug");
    order.info("info");
    order.alert("alert");
    cart.debug("debug");
    cart.info("info");
    cart.alert("alert");
    pay.debug("debug");
    pay.info("info");
    pay.alert("alert");
}

int main()
{
    test();
    return 0;
}

